package tests;

import static org.junit.Assert.*;
import negocios.Minibook;
import org.junit.Test;

public class minibookTest {	
	
	public Minibook inicio() {
		Minibook mini= Minibook.inicializarMinibook();
		
		mini.agregarUsuario("Oscar","oscar@.com",45);
		mini.agregarUsuario("juan","juan@.com.ar",45);
		mini.agregarUsuario("juana","juana@.com",33);
		mini.agregarUsuario("pedro","pedro@.com",26);
		mini.agregarUsuario("laura","laura@.com",18);

		return mini;
	}
	Minibook mini = inicio();
	
	@Test
	public void agregarUsuarioTest(){
		
		assertEquals(5,mini.getCantidadUsuarios());
		
		assertTrue(mini.estaRegistrado("laura@.com"));
		assertTrue(mini.estaRegistrado("pedro@.com"));
		assertTrue(mini.estaRegistrado("juana@.com"));
		assertTrue(mini.estaRegistrado("juan@.com.ar"));
		assertTrue(mini.estaRegistrado("oscar@.com"));
		
		
	}
	
	@Test
	public void agregarAmistadTest(){
		
		mini.agregarAmistad("oscar@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "pedro@.com");
		
		assertTrue(mini.sonAmigos("oscar@.com", "juana@.com"));
		assertTrue(mini.sonAmigos("juana@.com","oscar@.com"));
		
		assertTrue(mini.sonAmigos("laura@.com", "juana@.com"));
		assertTrue(mini.sonAmigos("juana@.com","laura@.com"));
		
		assertTrue(mini.sonAmigos("laura@.com", "pedro@.com"));
		assertTrue(mini.sonAmigos("pedro@.com","laura@.com"));
		
		assertFalse(mini.sonAmigos("oscar@.com", "juan@.com.ar"));
		assertFalse(mini.sonAmigos("juan@.com.ar","oscar@.com"));
		
		assertFalse(mini.sonAmigos("laura@com","oscar@.com"));
		assertFalse(mini.sonAmigos("oscar@.com","laura@.com"));
		
		assertFalse(mini.sonAmigos("oscar@.com","pedro@.com"));
		assertFalse(mini.sonAmigos("pedro@.com","oscar@.com"));
	}

	@Test
	public void listaDeAmigosTest(){
		
		mini.agregarAmistad("oscar@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "pedro@.com");
		
		assertTrue(mini.listaDeAmigos("oscar@.com").contains(mini.getPersona("juana@.com")));
		assertTrue(mini.listaDeAmigos("laura@.com").contains(mini.getPersona("juana@.com")));
		assertTrue(mini.listaDeAmigos("laura@.com").contains(mini.getPersona("pedro@.com")));
		
		assertTrue(mini.listaDeAmigos("juana@.com").contains(mini.getPersona("oscar@.com")));
		assertTrue(mini.listaDeAmigos("juana@.com").contains(mini.getPersona("laura@.com")));
		
		assertFalse(mini.listaDeAmigos("oscar@.com").contains(mini.getPersona("pedro@.com")));
			
	}
	
	@Test
	public void CantidadDeAmigosDeTest(){
		mini.agregarAmistad("oscar@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "pedro@.com");
		
		assertTrue(mini.getCantidadDeAmigosDe("laura@.com") == 2);
		assertTrue(mini.getCantidadDeAmigosDe("oscar@.com") == 1);
		assertTrue(mini.getCantidadDeAmigosDe("juana@.com") == 2);
		assertTrue(mini.getCantidadDeAmigosDe("pedro@.com") == 1);
		assertTrue(mini.getCantidadDeAmigosDe("juan@.com.ar") == 0);
	
	}
	
	@Test
	public void eliminarAmistadTest(){
		mini.agregarAmistad("oscar@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "juana@.com");
		mini.agregarAmistad("laura@.com", "pedro@.com");

		
		mini.eliminarAmistad("oscar@.com", "juana@.com");
		
		assertFalse(mini.getCantidadDeAmigosDe("oscar@.com") == 1);
		assertFalse(mini.getCantidadDeAmigosDe("juana@.com") == 2);
		
		
		assertTrue(mini.getCantidadDeAmigosDe("oscar@.com") == 0);
		assertTrue(mini.getCantidadDeAmigosDe("juana@.com") == 1);
		
		assertFalse(mini.listaDeAmigos("oscar@.com").contains(mini.getPersona("juana@.com")));
		assertFalse(mini.listaDeAmigos("juana@.com").contains(mini.getPersona("oscar@.com")));
		
		mini.eliminarAmistad("laura@.com", "pedro@.com");
		
		assertFalse(mini.getCantidadDeAmigosDe("laura@.com") == 2);
		assertFalse(mini.getCantidadDeAmigosDe("pedro@.com") == 1);
		
		assertTrue(mini.getCantidadDeAmigosDe("laura@.com") == 1);
		assertTrue(mini.getCantidadDeAmigosDe("pedro@.com") == 0);
		
		
		assertFalse(mini.listaDeAmigos("laura@.com").contains(mini.getPersona("pedro@.com")));
		assertFalse(mini.listaDeAmigos("pedro@.com").contains(mini.getPersona("laura@.com")));
		
		assertTrue(mini.listaDeAmigos("laura@.com").contains(mini.getPersona("juana@.com")));
	

	}
	
	@Test
	public void eliminarUsuarioTest(){
		
		mini.eliminarUsuario("oscar@.com");
		
		assertFalse(mini.estaRegistrado("oscar@.com"));
		
		
		
		assertFalse(mini.getCantidadUsuarios()== 5);
		assertTrue(mini.getCantidadUsuarios()== 4);
		
		assertFalse(mini.sonAmigos("oscar@.com","juana@.com"));
		assertFalse(mini.sonAmigos("juana@.com","oscar@.com"));
		
		
		mini.eliminarUsuario("pedro@.com");
		
		assertFalse(mini.estaRegistrado("pedro@.com"));
		
		
		
		assertFalse(mini.getCantidadUsuarios()== 5);
		assertTrue(mini.getCantidadUsuarios()== 3);
		
		assertFalse(mini.sonAmigos("pedro@.com","laura@.com"));
		assertFalse(mini.sonAmigos("laura@.com","pedro@.com"));
		
		

	}
	
	@Test
	public void CantidadDeAmigosTest(){
		
		// prueba que Persona.cantidadDeAmigos = Grafo.TreeSet.sise() de una determinada persona
		
		assertEquals(mini.getCantidadDeAmigosDe("laura@.com"),mini.getRegistrados().get("laura@.com").getCantidadAmigos());
		assertEquals(mini.getCantidadDeAmigosDe("oscar@.com"),mini.getRegistrados().get("oscar@.com").getCantidadAmigos());
		assertEquals(mini.getCantidadDeAmigosDe("pedro@.com"),mini.getRegistrados().get("pedro@.com").getCantidadAmigos());
		assertEquals(mini.getCantidadDeAmigosDe("juana@.com"),mini.getRegistrados().get("juana@.com").getCantidadAmigos());
		
		
		
	}

	
}
